package reflect;


import org.junit.Test;

import java.lang.reflect.Field;
import java.lang.reflect.Modifier;

/**
 * @description: 获取运行时类的属性结构
 * @author: apple
 * @date:  2021/12/28 10:59 下午
 * @version 1.0
 **/
public class FieldTest {

    @Test
    public void test1(){

       final Class<Person> personClass = Person.class;
       //  只能当前运行时类public修饰的属性,包含父类的
        Field[] fields = personClass.getFields();
        for (int i = 0; i < fields.length; i++) {
            System.out.println(fields[i]);
        }

        System.out.println("-----------");
        // 获取本类声明的所有属性,不包含父类声明的属性
        final Field[] declaredFields = personClass.getDeclaredFields();
        for (Field f : declaredFields) {
            System.out.println(f);
        }


    }

    @Test
    public void test2(){

        // 访问修饰符 数据类型 变量名；
        final Class<Person> personClass = Person.class;
        Field[] declaredFields = personClass.getDeclaredFields();
        for (Field f : declaredFields) {
            // 1、访问修饰符
            int modifiers = f.getModifiers();
            String mf = Modifier.toString(modifiers);
            System.out.print(modifiers + "->" + mf + " ");
            // 2、数据类型
            Class<?> type = f.getType();
            System.out.print(type);


            // 3、变量名
            String name = f.getName();
            System.out.println(" " + name);

        }
    }
}

